package com.muyu.file.controller;


import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.file.FileUtils;
import com.muyu.common.system.domain.SysFile;
import com.muyu.file.service.MinioService;
import com.muyu.file.util.MinioConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/**
 * 上传图片
 */
@RestController
@RequestMapping("/test")
public class MinioController {

    @Autowired
    MinioConfig minioConfig;
    @Autowired
    private MinioService minioService;

    // 上传

    @PostMapping("/upload")
    public Result upload(@RequestParam("file") MultipartFile multipartFile) throws Exception {
          SysFile sysFile = new SysFile();
         String url = this.minioConfig.upload(multipartFile);
            sysFile.setName(FileUtils.getName(url));
            sysFile.setUrl(url);
        return Result.success(sysFile);
    }

    // 下载文件
    @GetMapping("/download")
    public void download(@RequestParam("fileName") String fileName, HttpServletResponse response) {
        this.minioConfig.download(fileName, response);
    }

    // 列出所有存储桶名称
    @PostMapping("/list")
    public List<String> list() throws Exception {
        return this.minioConfig.listBucketNames();
    }

    // 创建存储桶
    @PostMapping("/createBucket")
    public boolean createBucket(String bucketName) throws Exception {
        return this.minioConfig.makeBucket(bucketName);
    }

    // 删除存储桶
    @PostMapping("/deleteBucket")
    public boolean deleteBucket(String bucketName) throws Exception {
        return this.minioConfig.removeBucket(bucketName);
    }

    // 列出存储桶中的所有对象名称
    @PostMapping("/listObjectNames")
    public List<String> listObjectNames(String bucketName) throws Exception {
        return this.minioConfig.listObjectNames(bucketName);
    }

    // 删除一个对象
    @PostMapping("/removeObject")
    public boolean removeObject(String bucketName, String objectName) throws Exception {
        return this.minioConfig.removeObject(bucketName, objectName);
    }

    // 文件访问路径
    @PostMapping("/getObjectUrl")
    public String getObjectUrl(String bucketName, String objectName) throws Exception {
        return this.minioConfig.getObjectUrl(bucketName, objectName);
    }

//    @Autowired
//    private MinioService minioService;
//
//    @PostMapping("/add")
//    public String add( String multipartFile) throws Exception {
//        //开始时间
//        long startTime = System.currentTimeMillis(); // 获取开始时间
//        System.out.println("开始时间：" + startTime);
//
//        minioService.add(multipartFile); // 执行方法调用
//
//        long endTime = System.currentTimeMillis(); // 获取结束时间
//        System.out.println("结束时间：" + endTime);
//
//        long duration = endTime - startTime; // 计算耗时
//
//        System.out.println("耗时：" + duration + " 毫秒");
//        System.out.println("耗时：" + duration / 1000 + " 秒");
//        System.out.println("耗时：" + duration / 60000 + " 分钟");
//        System.out.println("耗时：" + duration / 60000 + " 分钟");
//        return  new String("添加成功");
//    }
//
//
//    /**
//     * 添加个人信息以及作品集
//     */
//
//    @PostMapping("informationAdd")
//    public String informationAdd(@RequestParam("file") String filePath){
//        minioService.informationAdd(filePath);
//        return "添加成功";
//    }

//    @PostMapping("/add")
//    public  String add(String multipartFile) throws Exception {
//       return minioService.add(multipartFile);
//    }

    @PostMapping("/bulkUpload")
    public Object upload(@RequestParam("files") MultipartFile[] multipartFiles) throws Exception {
        List<String> uploadedFilePaths = new ArrayList<>();

        // 遍历上传的文件数组，处理每个文件
        for (MultipartFile file : multipartFiles) {
            // 调用上传方法上传文件
            String uploadedFilePath = this.minioConfig.upload(file);
            uploadedFilePaths.add(uploadedFilePath);
        }

        // 返回所有上传的文件路径
        return uploadedFilePaths;
    }

}
